﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using CRC.Clases;
using CRC.Inspecciones.Dominio.Clases;
using CRC.Inspecciones.Dominio.Controlador;
using CRC.GestionSalones.Dominio.Clases;

namespace CRC.Inspecciones.Presentacion
{
    class EditarZona : UsrZona
    {
        private Controlador_ModificarZona cMZ = new Controlador_ModificarZona();

        public EditarZona(int pIntZona) :base() {

            InitializeComponent();
            ObtenerInspectores();
            CargarZona(pIntZona);

        }

        private void ObtenerInspectores()
        {
            IList<Persona> inspectores = null;

            try
            {

                inspectores = cMZ.VisualizarInspectores();
                this.ComboInspectores.DataSource = inspectores;
                this.ComboInspectores.DisplayMember = "NombreCompleto";
                this.ComboInspectores.ValueMember = "Id";
            }
            catch (Exception ex)
            {
                MessageBox.Show(
                    "Error al obtener los inspectores. " + ex.Message,
                    "Error",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error
                );
            }
        }

        private void CargarZona(int pIntZona)
        {

            try 
            {
                Zona zona = cMZ.ObtenerZona(pIntZona);

                this.TxtNombre.Text = zona.Nombre;
                this.ComboInspectores.SelectedValue = zona.Inspector.Id;
                List<Salon> salonesAsignados= new List<Salon>();
                
                foreach (Salon s in zona.Salones)
                {
                    salonesAsignados.Add(s);
                }

                this.lstSalonesAsignados.DataSource = salonesAsignados;
            
            }
            catch (Exception ex) {

                MessageBox.Show(
                        "Error al cargar la zona. " + ex.Message,
                        "Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Error
                    );
            
            }
            

        }

        public override void butOK_Click(object sender, EventArgs e)
        {

            if (TxtNombre.Text.Trim().Length == 0)
            {
                MessageBox.Show(
                    "El nombre de la zona es obligatorio",
                    "Atención",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Exclamation
                );
                return;
            }

            if (this.ComboInspectores.SelectedItem == null)
            {
                MessageBox.Show(
                   "Indica el inspector por favor.",
                   "Atención",
                   MessageBoxButtons.OK,
                   MessageBoxIcon.Exclamation
               );
                return;
            }

            try
            {
                
                Zona zona = cMZ.ModificarZona(
                    TxtNombre.Text.Trim(), 
                    (int)this.ComboInspectores.SelectedValue, 
                    (IList<Salon>)lstSalonesAsignados.DataSource
                );

                foreach (IListadoZonasListener listener in this.lstIListadoZonas)
                { listener.actualizarZona(zona); }

                this.Dispose();

            }
            catch (Exception ex)
            {
                MessageBox.Show(
                        ex.Message,
                        "Error",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Error
                    );
            }


        }

        private void InitializeComponent()
        {
            this.SuspendLayout();
            // 
            // lstSalonesAsignados
            // 
            this.lstSalonesAsignados.Visible = true;
            // 
            // label1
            // 
            this.label1.Visible = true;
            // 
            // EditarZona
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.Name = "EditarZona";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

    }
}
